home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / MATH / MFLOAT10.ZIP / MFLOAT.H < prev    next >
C/C++ Source or Header  |  1993-04-28  |  11KB  |  258 lines

  1. #ifndef mfloat_h
  2. #define mfloat_h
  3.  
  4. #include <string.h>             /* strlen() */
  5.  
  6. /* ------------------------------------------------------------------------ */
  7. /* mfloat types */
  8. /* ------------------------------------------------------------------------ */
  9.  
  10. #ifndef mfloatwords
  11. #define mfloatwords 16           /* maximum precision */
  12. #endif
  13.  
  14. typedef int mfloata[mfloatwords];/* mfloat array */
  15. #define mfloat_ int far *        /* pointer to array */
  16. #define mfloat mfloata           /* for use in 'C' programs */
  17.  
  18. /* ------------------------------------------------------------------------ */
  19. /* compiler control */
  20. /* ------------------------------------------------------------------------ */
  21.  
  22. #ifdef __cplusplus
  23.   extern "C" {                   /* do not extend names (C++) */
  24. #endif
  25.  
  26. #ifdef __STDC__                  /* ANSI comatibility mode */
  27. #ifndef __HUGE__
  28. #error  ANSI compatibility only with model 'huge'
  29. #endif
  30. #define far
  31. #undef mfloat_
  32. #define mfloat_ int *
  33. #pragma option -Ff                 /* automatic far data */
  34.  
  35. #define pascal
  36. #pragma option -p                   /* pascal calling convention */
  37. #pragma option -l-c-             /* no case sensitive link */
  38.  
  39. #pragma option -u-                 /* do not generate underlines */
  40.  
  41. #define _fstrlen(v) strlen(v)
  42. #endif
  43.  
  44. /* ------------------------------------------------------------------------ */
  45. /* mfloat basic functions */
  46. /* ------------------------------------------------------------------------ */
  47.  
  48.        void      far pascal setmantissawords(int number);
  49. extern int       far pascal getmantissawords(void);
  50. extern void      far pascal reseterror(void);
  51. extern char      far pascal geterror(void);
  52.  
  53. extern mfloat_   far pascal equm(mfloat_ a,             /* a <- b           */
  54.                 const mfloat_ b);
  55. extern mfloat_   far pascal addm(mfloat_ a,             /* a <- a + b       */
  56.                 const mfloat_ b);
  57. extern mfloat_   far pascal subm(mfloat_ a,             /* a <- a - b       */
  58.                 const mfloat_ b);
  59. extern mfloat_   far pascal multm(mfloat_ a,            /* a <- a * b       */
  60.                 const mfloat_ b);
  61. extern mfloat_   far pascal divm(mfloat_ a,             /* a <- a / b       */
  62.                 const mfloat_ b);
  63. extern mfloat_   far pascal multi(mfloat_ a,            /* a <- a * b       */
  64.                 int b);
  65. extern mfloat_   far pascal divi(mfloat_ a,             /* a <- a / b       */
  66.                 int b);
  67. extern mfloat_   far pascal inversm(mfloat_ a);         /* a <- 1/a         */
  68. extern mfloat_   far pascal negm(mfloat_ a);            /* a <-  - a        */
  69. extern char      far pascal eqzero(const mfloat_ a);    /* eqZero <- a = 0  */
  70. extern char      far pascal gtzero(const mfloat_ a);    /* gtZero <- a > 0  */
  71. extern char      far pascal gezero(const mfloat_ a);    /* geZero <- a >= 0 */
  72. extern char      far pascal gtm(const mfloat_ a,        /* gtm <- a > b     */
  73.                 const mfloat_ b);
  74. extern char      far pascal eqm(const mfloat_ a,        /* eqm <- a = b     */
  75.                 const mfloat_ b);
  76. extern mfloat_   far pascal getzerom(mfloat_ a);        /* a <- 0           */
  77. extern mfloat_   far pascal getonem(mfloat_ a);         /* a <- 1           */
  78. extern mfloat_   far pascal getpim(mfloat_ a);          /* a <- pi          */
  79. extern mfloat_   far pascal getln2m(mfloat_ a);         /* a <- ln(2)       */
  80. extern mfloat_   far pascal getln10m(mfloat_ a);        /* a <- ln(10)      */
  81.        int       far pascal strtomf(mfloat_ a,          /* a <- b           */
  82.                 const char far * b);
  83.        char far * far pascal mftoa(char far * str,      /* str <- a         */
  84.                 const mfloat_ a,
  85.                 int len);
  86.        char far * far pascal mftostr(char far * str,    /* str <- a         */
  87.                 const mfloat_ a,
  88.                 int len,
  89.                 const char far * format);
  90.        double    far pascal mftod(const mfloat_ b);     /* mftod <- b       */
  91.        long double far pascal mftold(const mfloat_ b);  /* mftold <- b      */
  92. extern mfloat_   far pascal dtomf(mfloat_ a,            /* a <- b           */
  93.                 double b);
  94. extern mfloat_   far pascal ldtomf(mfloat_ a,           /* a <- b           */
  95.                 long double b);
  96.  
  97. /* ------------------------------------------------------------------------ */
  98. /* standard functions (Borland C: MATH.H) */
  99. /* ------------------------------------------------------------------------ */
  100.  
  101. extern mfloat_   far pascal acosm(mfloat_ a);           /* a <- acos(a)     */
  102. extern mfloat_   far pascal asinm(mfloat_ a);           /* a <- asin(a)     */
  103. extern mfloat_   far pascal atanm(mfloat_ a);           /* a <- atan(a)     */
  104. extern mfloat_   far pascal atan2m(mfloat_ a,           /* a <- atan2(a,b)  */
  105.                 const mfloat_ b);
  106. /*                          atof                           see strtomf      */
  107. extern mfloat_   far pascal ceilm(mfloat_ a);           /* a <- ceil(a)     */
  108. extern mfloat_   far pascal cosm(mfloat_ a);            /* a <- cos(a)      */
  109. extern mfloat_   far pascal coshm(mfloat_ a);           /* a <- cosh(a)     */
  110. extern mfloat_   far pascal expm(mfloat_ a);            /* a <- exp(a)      */
  111. extern mfloat_   far pascal fabsm(mfloat_ a);           /* a <- fabs(a)     */
  112. extern mfloat_   far pascal floorm(mfloat_ a);          /* a <- floor(a)    */
  113. extern mfloat_   far pascal fmodm(mfloat_ a,            /* a <- fmod(a,b)   */
  114.                 const mfloat_ b);
  115. extern mfloat_   far pascal frexpm(mfloat_ a,           /* a <- frexp(a,b)  */
  116.                 int * b);
  117. extern mfloat_   far pascal hypotm(mfloat_ a,           /* a <- hypot(a,b)  */
  118.                 const mfloat_ b);
  119. extern mfloat_   far pascal ldexpm(mfloat_ a,           /* a <- ldexp(a,b)  */
  120.                 int b);
  121. extern mfloat_   far pascal logm(mfloat_ a);            /* a <- log(a)      */
  122. extern mfloat_   far pascal log10m(mfloat_ a);          /* a <- log10(a)    */
  123. extern mfloat_   far pascal modfm(mfloat_ a,            /* a <- modf(a,b)   */
  124.                 mfloat_ b);
  125. extern mfloat_   far pascal powm(mfloat_ a,             /* a <- pow(a,b)    */
  126.                 const mfloat_ b);
  127. extern mfloat_   far pascal pow10m(mfloat_ a,           /* a <- 10**b       */
  128.                 int b);
  129. extern mfloat_   far pascal sinm(mfloat_ a);            /* a <- sin(a)      */
  130. extern mfloat_   far pascal sinhm(mfloat_ a);           /* a <- sinh(a)     */
  131. extern mfloat_   far pascal sqrtm(mfloat_ a);           /* a <- sqrt(a)     */
  132. extern mfloat_   far pascal tanm(mfloat_ a);            /* a <- tan(a)      */
  133. extern mfloat_   far pascal tanhm(mfloat_ a);           /* a <- tanh(a)     */
  134.  
  135. /* ------------------------------------------------------------------------ */
  136. /* extended standard functions */
  137. /* ------------------------------------------------------------------------ */
  138.  
  139. extern mfloat_   far pascal acoshm(mfloat_ a);          /* a <- acosh(a)    */
  140. extern mfloat_   far pascal acotm(mfloat_ a);           /* a <- acot(a)     */
  141. extern mfloat_   far pascal acothm(mfloat_ a);          /* a <- acoth(a)    */
  142. extern mfloat_   far pascal asinhm(mfloat_ a);          /* a <- asinh(a)    */
  143. extern mfloat_   far pascal atanhm(mfloat_ a);          /* a <- atanh(a)    */
  144. extern mfloat_   far pascal cossinm(mfloat_ a,          /* a <- cos(a),     */
  145.                     mfloat_ b);         /* b <- sin(a)      */
  146. extern mfloat_   far pascal cotm(mfloat_ a);            /* a <- cot(a)      */
  147. extern mfloat_   far pascal cothm(mfloat_ a);           /* a <- coth(a)     */
  148. extern mfloat_   far pascal exp10m(mfloat_ a);          /* a <- 10 ** a     */
  149. extern mfloat_   far pascal sqrm(mfloat_ a);            /* a <- sqr(a)      */
  150. extern mfloat_   far pascal truncm(mfloat_ a);          /* a <- trunc(a)    */
  151.  
  152. /* ------------------------------------------------------------------------ */
  153. /* internal functions */
  154. /* ------------------------------------------------------------------------ */
  155.  
  156. extern void      far pascal setmantissawords_(int number);
  157. extern char far * far pascal mftostr_(char far * a,     /* a <- b           */
  158.                 const mfloat_ b,
  159.                 int far * len,
  160.                 const char far * format);
  161. extern int       far pascal strtomf_(mfloat_ a,         /* a <- b           */
  162.                 const char far * b,
  163.                 const int len);
  164. extern void      far pascal mftod_(double far * a,      /* a <- b           */
  165.                 const mfloat_ b);
  166. extern void      far pascal mftold_(long double far * a, /* a <- b          */
  167.                 const mfloat_ b);
  168.  
  169. /* ------------------------------------------------------------------------ */
  170. /* constants */
  171. /* ------------------------------------------------------------------------ */
  172.  
  173. extern far const pascal mfloata zerom;
  174. extern far const pascal mfloata onem;
  175. extern far const pascal mfloata pim;
  176. extern far const pascal mfloata ln2m;
  177. extern far const pascal mfloata ln10m;
  178. extern far const pascal mfloata powten;
  179.  
  180. /* ------------------------------------------------------------------------ */
  181. /* static variables */
  182. /* ------------------------------------------------------------------------ */
  183.  
  184. #ifdef mfloatb
  185. extern far int pascal mantissawords;           /* for internal use only */
  186. extern far char pascal calculationerror;
  187. #else
  188. extern far int pascal mantissawords = mfloatwords-1;    /* normal use */
  189. extern far char pascal calculationerror = 0;
  190.  
  191. /* ------------------------------------------------------------------------ */
  192. /* included functions */
  193. /* ------------------------------------------------------------------------ */
  194.  
  195. void far pascal setmantissawords(int number) {
  196.   if (number > mfloatwords - 1)
  197.     number = mfloatwords - 1;
  198.   setmantissawords_(number);
  199. };
  200.  
  201.  
  202. int far pascal strtomf(mfloat_ a, const char far * b) {
  203.   return(strtomf_(a,b,_fstrlen(b)));
  204. }
  205.  
  206.  
  207. char far * far pascal mftoa(char far * str, const mfloat_ a, int len) {
  208.   mftostr_(str,a,&len,".32767F");
  209.   str[len] = 0;
  210.   return str;
  211. }
  212.  
  213.  
  214. char far * far pascal mftostr(char far * str, const mfloat_ a, int len,
  215.         const char far * format) {
  216.   mftostr_(str,a,&len,format);
  217.   str[len] = 0;
  218.   return str;
  219. };
  220.  
  221.  
  222. double far pascal mftod(const mfloat_ b) {
  223.   double tmp;
  224.   mftod_(&tmp, b);
  225.   return tmp;
  226. }
  227.  
  228.  
  229. long double far pascal mftold(const mfloat_ b) {
  230.   long double tmp;
  231.   mftold_(&tmp, b);
  232.   return tmp;
  233. }
  234.  
  235. #endif /* ifdef mfloatb else */
  236.  
  237. /* ------------------------------------------------------------------------ */
  238. /* compiler control */
  239. /* ------------------------------------------------------------------------ */
  240.  
  241. #ifdef __cplusplus
  242. }                                /* do not extend function names (C++) */
  243. #endif
  244.  
  245. #ifdef __STDC__
  246. #undef far                      /* delete some of the self made defines */
  247. #undef pascal
  248. #undef huge
  249. #pragma option -u               /* generate underlines   */
  250. #pragma option -p-              /* no pascal calling convention */
  251. #endif
  252.  
  253. #endif /* ifndef mfloat_h */
  254.  
  255. /* ------------------------------------------------------------------------ */
  256. /* End of MFLOAT.H */
  257. /* ------------------------------------------------------------------------ */
  258.